home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / contsens / unification.h < prev   
C/C++ Source or Header  |  1991-01-31  |  3KB  |  66 lines

  1.  
  2.  
  3. /*   Copyright (C) 1990 Riet Oolman
  4.  
  5. This file is part of GLASS.
  6.  
  7. GLASS is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 1, or (at your option)
  10. any later version.
  11.  
  12. GLASS is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GLASS; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21.  
  22. /* file: unification.h
  23.    author: H. Oolman
  24.    last changed: 13-7-1990
  25.    purpose: functions for unification of two types
  26.    modifications:
  27.    updated for new version of type checker
  28.    p2c translated, tmc access procs.
  29. */
  30.  
  31. /* t1 (tag UNKNOWN or SOME) should be changed to t2. This is done by
  32.    indirection. Therefore care must be taken to let all occurrences of t1 with
  33.    the same number have the same record. On inspecting
  34.    a type, these INDIRs should always be skipped */
  35. extern Void becomes PP((typcrec *t1, typcrec *t2));
  36.  
  37. /* see if typename n does not occur as a real subpart of type t (this is not
  38.    allowed) */
  39. extern boolean occurs PP((long n, typcrec *t));
  40.  
  41. /* change unknown parts of t1 and t2 (as little as possible) such that t2
  42.    after that can be enlarged to t1 (t2<t1)
  43.    val: expression that causes the compat to be done */
  44. extern Void compat PP((typcrec *t1, typcrec *t2, val val));
  45.  
  46. /* change unknown parts of t1 and t2 (as little as possible) such that
  47.    ti < upper (smallest upper bound)
  48.    val: the expression that caused this to be called */
  49. extern typcrec *upper PP((typcrec *t1, typcrec *t2, val val));
  50.  
  51. /* if mustendemp then ty must be a (tuple) type ending in the empty
  52.    type; if mustconn ty may only be a type fit for connections. Error
  53.    if conditions not fullfilled.
  54.    UNKNOWNs in ty are restricted (in their mustendemp and mustconn fields)
  55.    to the demands
  56.    Result: can be restricted without errors
  57.    val: the expression that caused this to be called */
  58. extern boolean restrictable PP((int mustendemp, int mustconn, typcrec *ty,
  59.                 val val));
  60.  
  61. /* ty must be composed of a number of the same parts; the result
  62.   is the smallest type larger than each part
  63.   val: the expression that caused this to be called */
  64. extern typcrec *uppercomps PP((typcrec *ty, val val));
  65.  
  66.